#include<stdio.h>

#include<unistd.h>

#include<string.h>

#include<stdlib.h>

#include<sys/types.h>

#include<sys/wait.h>

void ChildRun()
{
  int cnt = 5;
  while(cnt)
  {
    printf("i'm child process, pid: %d, ppid: %d, cnt: %d\n", getpid(), getppid(), cnt);
    sleep(2);
    cnt--;
    
  }
}

int main()
{
	printf("I am father, pid: %d, ppid: %d\n", getpid(), getppid());
    pid_t id = fork();
    if(id == 0)
    {
      //child
      ChildRun();
      printf("child quit ...\n");
      exit(1);
    }

    //father
    sleep(15);
    //pid_t rid = wait(NULL);
    //pid_t waitpid(pid_t pid, int* wstatus, int options) ;   
    int status = 0;
    pid_t rid = waitpid(id, &status, 0);
    if(rid > 0)
    {
      printf("wait Success, rid: %d\n", rid);

    }

    sleep(3);
    printf("father  quit ..., status: %d\n", status);
	return 0;
}



//自定义枚举常量
//enum
//{
//	Success = 0,
//	DIV_ZERO,
//	Mod_Zero,
//};
//int exit_code = Success;
//
//const char* CodeToErrString(int code)
//{
//	switch(code)
//	{
//		case Success:
//			return "Success!";
//		case DIV_ZERO:
//			return "div zero!";
//		case Mod_Zero:
//			return "mod zero!";
//		default:
//			return "unknown error!";
//	}
//}
//
//int Div(int x, int y)
//{
//	if( 0 == y)
//	{
//		exit_code = DIV_ZERO;
//		return -1;
//	}
//	else
//	{
//		return x / y;
//	}
//}
//
//int main()
//{
// 	int result = 0;
//	result = Div(10, 5);
//	printf("result = %d [%s]\n", result, CodeToErrString(exit_code));
//	result = Div(10, 0);
//	printf("result = %d [%s]\n", result, CodeToErrString(exit_code));
//	sleep(1);
//	return 0;
//}
